1. Field
The present invention relates generally to the program performance monitoring and analysis domain and, more specifically, to low intrusive methods of program logic restoration, such as constructing statistical control flow graphs and revealing information on procedure call sequences.
2. Description
The ability to reconstruct program flow logic and correlate it with performance characteristics, while employing low-overhead statistical data collection methods, is essential for modern performance monitoring systems. One of the most popular solutions is to build a statistical call graph to restore call sequences for each statistically determined performance hotspot in a program code.
Various techniques may be employed to restore call sequences: some of them are precise and rely on information provided by compilers (e.g., stack unwinding), some are imprecise and employ a heuristic stack search for return addresses and instruction decoding, but all of them are inappropriately intrusive, and cannot be directly applicable to real-time profiling of highly nested code.
The importance of real-time profiling, and hence the requirement of low intrusiveness, can be explained by the inability to correlate performance characteristics with program states since information on the actual program states is absent at the post-processing stage, and the obtained performance results become distorted in case the monitoring system is too intrusive.
Therefore, a need exists for the capability to enable real-time control flow restoration by minimizing the number of stack unwinding operations (or equivalent thereof) and removing the dependency of stack unwinding methods on the number of nesting levels in any given program.